﻿using System;
using System.Windows.Forms;
using BadgeManager.Controller;
using BadgeManager.Model;

namespace Badge_Manager.View
{
    public partial class frmElencoUtenti : Form
    {
        private ctrlUtente cUtente;
        private Utente Utente;

        public frmElencoUtenti(Utente utente)
        {
            InitializeComponent();
            this.Utente = utente;
            cUtente = new ctrlUtente();
            this.ControllaSuperAdmin();
            this.Start();
        }

        private void ControllaSuperAdmin()
        {
            if (Utente != null)
            {
                if (cUtente.isSuperAdmin(Utente))
                    cmdImpostaSa.Enabled = true;
                else
                    cmdImpostaSa.Enabled = false;
            }
        }

        private void Start()
        {
            gridUtenti.DataSource = null;
            gridUtenti.DataSource =
                cUtente.Ricerca();

            gridUtenti.Columns["IdUtente"].Visible = false;
            gridUtenti.Columns["Password"].Visible = false;
        }

        private void CancellaUtente()
        {
            if (gridUtenti.Rows.Count > 0
                && gridUtenti.SelectedRows.Count == 1)
            {
                cUtente.Id = (Guid)gridUtenti.CurrentRow.Cells["IdUtente"].Value;
                cUtente.NomeUtente = gridUtenti.CurrentRow.Cells["Username"].Value.ToString();
                if (cUtente.CancellaUtente(cUtente) > 0)
                {
                    gridUtenti.Rows.Remove(gridUtenti.CurrentRow);
                    MessageBox.Show("Utente rimosso correttamente");
                }
            }
        }

        private void txtCerca_TextChanged(object sender, EventArgs e)
        {
            gridUtenti.DataSource = null;
            gridUtenti.DataSource = cUtente.Ricerca();//fare il criterio con like

            gridUtenti.Columns["Id"].Visible = false;
            gridUtenti.Columns["Password"].Visible = false;
        }

        private void cmdCancella_Click(object sender, EventArgs e)
        {
            if (gridUtenti.Rows.Count > 0 &&
                gridUtenti.SelectedRows.Count == 1)
            {
                DialogResult scelta = MessageBox.Show("ATTENZIONE: Cancellare l'utente e i permessi?", "Attenzione"
                    , MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                if (scelta == System.Windows.Forms.DialogResult.Yes)
                {
                    //può cancellare solo l'account corrente
                    if (gridUtenti.CurrentRow.Cells["Username"].Value.ToString() != Utente.NomeUtente)
                    {
                        MessageBox.Show("Non puoi cancellare un account diverso dal tuo");
                        return;
                    }
                    this.CancellaUtente();
                }
            }
        }

        private void cmdNuovo_Click(object sender, EventArgs e)
        {
        }

        private void cmdAggiorna_Click(object sender, EventArgs e)
        {
            this.Start();
        }

        private void cmdModifica_Click(object sender, EventArgs e)
        {
            if (gridUtenti.Rows.Count > 0 &&
                gridUtenti.SelectedRows.Count == 1)
            {
                //può modificare solo la password dell'utente corrente
                if (gridUtenti.CurrentRow.Cells["Username"].Value.ToString() != Utente.NomeUtente)
                {
                    MessageBox.Show("Non puoi modificare la password degli altri utenti");
                    return;
                }

                Utente utente = new Utente();
                utente.Id = (Guid)gridUtenti.CurrentRow.Cells["IdUtente"].Value;
                utente.NomeUtente = gridUtenti.CurrentRow.Cells["Username"].Value.ToString();
                utente.Password = gridUtenti.CurrentRow.Cells["Password"].Value.ToString();

                frmModificaUtente frm = new frmModificaUtente(utente);
                frm.MdiParent = this.MdiParent;
                frm.Show();
            }
        }

        private void cmdImpostaSa_Click(object sender, EventArgs e)
        {
            if (gridUtenti.Rows.Count > 0
                && gridUtenti.SelectedRows.Count == 1)
            {
                DialogResult scelta = MessageBox.Show("Vuoi impostare l'account selezionato '"
                    + gridUtenti.CurrentRow.Cells["Username"].Value.ToString() + "' come Super Admin?"
                    , "ATTENZIONE", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (scelta == System.Windows.Forms.DialogResult.Yes)
                {
                    ctrlUtente cUser = new ctrlUtente();
                    cUser.Id = (Guid)gridUtenti.CurrentRow.Cells["Id"].Value;
                    cUser.Permesso = new Permesso()
                    {
                        Lettura = true,
                        Scrittura = true,
                        Modifica = true,
                        Sa = true
                    };
                    if (cUser.ModificaPermesso(cUser) > 1)
                        this.Close();
                }
            }
        }
    }
}